import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Esta es la clase la cual permite que el jugador principal deje una bomba 
 * y esta explote. Al momento de agarrar la superBomba en esta clase
 * se aumenta el radio de alcance.
 * 
 * @autor Irma Delgado  
 * @versión noviembre/2014
 */
public class Bomba extends Actor
{
    /**
     * Act - do whatever the Explosion wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
   private int delay =0;
    private int sprite=0;
    private SimpleTimer timer = new SimpleTimer();
    private int bombRadius;
    private boolean poder;
    public static final int TAM=32;
    
    /**
     * Constructor de la clase Bomba
    */
    
    public Bomba()
    {
        poder=false;
        bombRadius=1;
        timer.mark();
        setImage("Bomba.png");
    }
    /**
     * Actua de la clase bomba, se checan banderas: explosion simple, super explosion y el tiempo de espera de cada bomba(3s)
     * 
       */
    public void act() 
    {
        if(((MundoBob)getWorld()).getBob().getSuperBomba()==true)
            poder=true;
        if(((MundoBob)getWorld()).getBob().getSuperBomba()==false)
            poder=false;
            
        if (timer.millisElapsed() > 3000&&poder==false)// && Greenfoot.isKeyDown("space"))
        {
            //superExplosion();
            explotar();
            getWorld().removeObject(this);
      }
        if (timer.millisElapsed() > 3000&&poder==true)
        {
            superExplosion();
            //explotar();
            getWorld().removeObject(this);
      }
      
     }    
     /**
      * Metodo para hacer la explosion(forma de cruz) se validan las paredes para que esa parte no explote
        */
    public void explotar()
    {
         for(int i = 1; i <= bombRadius; i++)
        // For-Schleife für Richtung nach oben. Lenni&Flo
        {
            Actor pared = getOneObjectAtOffset(0, -TAM*i, Pared.class);
            Actor planta = getOneObjectAtOffset(0, -TAM*i, Plant.class);
            if(pared != null) 
            {
                i = bombRadius +1;
            }
            else if(planta != null)
            {
                getWorld().addObject(new Explosion(), getX(), getY()-TAM*i);
                i = bombRadius +1;
            }
            else
            {
                getWorld().addObject(new Explosion(), getX(), getY()-TAM*i);
            }
        }
        for(int i = 1; i <= bombRadius; i++)
        // For-Schleife für Richtung nach unten. Lenni&Flo
        {
            Actor pared = getOneObjectAtOffset(0, TAM*i, Pared.class);
            Actor planta = getOneObjectAtOffset(0, TAM*i, Plant.class);;
            if(pared != null) 
            {
                i = bombRadius +1;
            }
            else if(planta != null)
            {
                getWorld().addObject(new Explosion(), getX(), getY()+TAM*i);
                i = bombRadius +1;
            }
            else
            {
                getWorld().addObject(new Explosion(), getX(), getY()+TAM*i);
            }
        }
        for(int i = 1; i <= bombRadius; i++)
        // For-Schleife für Richtung nach links. Lenni&Flo
        {
            Actor pared = getOneObjectAtOffset(-TAM*i, 0, Pared.class);
            Actor planta = getOneObjectAtOffset(-TAM*i, 0, Plant.class);
            if(pared != null) 
            {
                i = bombRadius +1;
            }
            else if(planta != null)
            {
                getWorld().addObject(new Explosion(), getX()-TAM*i, getY());
                i = bombRadius +1;
            }
            else
            {
                getWorld().addObject(new Explosion(), getX()-TAM*i, getY());
            }
        }
        for(int i = 1; i <= bombRadius; i++)
        // For-Schleife für Richtung nach rechts. Lenni&Flo
        {
            Actor pared = getOneObjectAtOffset(TAM*i, 0, Pared.class);
            Actor planta = getOneObjectAtOffset(TAM*i, 0, Plant.class);
            if(pared != null) 
            {
                i = bombRadius +1;
            }
            else if(planta != null)
            {
                getWorld().addObject(new Explosion(), getX()+TAM*i, getY());
                i = bombRadius +1;
            }
            else
            {
                getWorld().addObject(new Explosion(), getX()+TAM*i, getY());
            }
        }
        getWorld().addObject(new Explosion(), getX(), getY());
    }
    /**
     * Metodo para que la explosion tenga mas alcance, a diferencia del de explosion este maneja un radio de 5
       */
    public void superExplosion()
    {
        bombRadius=7;
         for(int i = 1; i <= bombRadius; i++)
        // For-Schleife für Richtung nach oben. Lenni&Flo
        {
            Actor pared = getOneObjectAtOffset(0, -TAM*i, Pared.class);
            Actor planta = getOneObjectAtOffset(0, -TAM*i, Plant.class);
            if(pared != null) 
            {
                i = bombRadius +1;
            }
            else if(planta != null)
            {
                getWorld().addObject(new Explosion(), getX(), getY()-TAM*i);
                i = bombRadius +1;
            }
            else
            {
                getWorld().addObject(new Explosion(), getX(), getY()-TAM*i);
            }
        }
        for(int i = 1; i <= bombRadius; i++)
        // For-Schleife für Richtung nach unten. Lenni&Flo
        {
            Actor pared = getOneObjectAtOffset(0, TAM*i, Pared.class);
            Actor planta = getOneObjectAtOffset(0, TAM*i, Plant.class);;
            if(pared != null) 
            {
                i = bombRadius +1;
            }
            else if(planta != null)
            {
                getWorld().addObject(new Explosion(), getX(), getY()+TAM*i);
                i = bombRadius +1;
            }
            else
            {
                getWorld().addObject(new Explosion(), getX(), getY()+TAM*i);
            }
        }
        for(int i = 1; i <= bombRadius; i++)
        // For-Schleife für Richtung nach links. Lenni&Flo
        {
            Actor pared = getOneObjectAtOffset(-TAM*i, 0, Pared.class);
            Actor planta = getOneObjectAtOffset(-TAM*i, 0, Plant.class);
            if(pared != null) 
            {
                i = bombRadius +1;
            }
            else if(planta != null)
            {
                getWorld().addObject(new Explosion(), getX()-TAM*i, getY());
                i = bombRadius +1;
            }
            else
            {
                getWorld().addObject(new Explosion(), getX()-TAM*i, getY());
            }
        }
        for(int i = 1; i <= bombRadius; i++)
        // For-Schleife für Richtung nach rechts. Lenni&Flo
        {
            Actor pared = getOneObjectAtOffset(TAM*i, 0, Pared.class);
            Actor planta = getOneObjectAtOffset(TAM*i, 0, Plant.class);
            if(pared != null) 
            {
                i = bombRadius +1;
            }
            else if(planta != null)
            {
                getWorld().addObject(new Explosion(), getX()+TAM*i, getY());
                i = bombRadius +1;
            }
            else
            {
                getWorld().addObject(new Explosion(), getX()+TAM*i, getY());
            }
        }
        getWorld().addObject(new Explosion(), getX(), getY());
    }
    

}
